<?php
	require_once('connex.php') ;
	ini_set("memory_limit",-1) ;

	class CopieImage
	{
		
		public function __construct() {
		
		}
		/*
		*Fonction permetant d'ouvrir un fichier zip 
		*@param string $_zPath
		*@return boolean $bSuccess
		*/
		public static function ouvrirDossierZip($_zPathDossierImage="" , $_zPathDossierAnnonce,$_zPathDossierMiniature ,$_oParamsConnections) {
		
			
			if (!is_dir($_zPathDossierAnnonce) ) {
				//On cree un dossier de l'annonce
				mkdir($_zPathDossierAnnonce, 0777);
			}
			if (!is_dir($_zPathDossierMiniature) ) {
				//On cree un dossier de la miniature
				mkdir($_zPathDossierMiniature, 0777);
			}
	
			
			if ( is_dir($_zPathDossierImage) )
			{
				$oDosier				= opendir($_zPathDossierImage) ;
				
				//maintenant on parcours ce dossier
				while ( $oDossier1	= readdir($oDosier) )
				{
					$iAnnonceId		= intval($oDossier1) ;
					if ( $iAnnonceId && is_dir( $_zPathDossierImage . "/" .$oDossier1 ) )
					{
							
							$zFileName				= self::getMarqueModeleVersionByAnnonceId($iAnnonceId , $_oParamsConnections) ;	
							//maintenant on parcours chaque dossier premeiere generation 
							$oDossierFirst		= opendir($_zPathDossierImage . "/" .$oDossier1) ; 
							while ( $oDossier2	= readdir($oDossierFirst) )
							{
								
								//on teste si la deuxieme generation est un dossier
								if ( is_dir( $_zPathDossierImage . "/" .$oDossier1."/".$oDossier2 ) )
								{
									//Si c'est un dossier on teste si son nom est 
									if ( $oDossier2 == "mini")
									{
										//on parcours à nouveau ce dossier et copie les fichiers dedans le dossier $_zPathDossierMiniature
										$oDossierThree		= opendir( $_zPathDossierImage . "/" .$oDossier1 ."/".$oDossier2 ) ; 
										while ( $oDossier3	= readdir($oDossierThree) )
										{ 
											//on teste si la troisieme generation est un fichier
											if( is_file( $_zPathDossierImage . "/" .$oDossier1. "/" . $oDossier2 ."/" .$oDossier3  ) )
											{
												die;
												$zImageMiniature			=  $_zPathDossierImage     . "/"   . $oDossier1 . "/"  . $oDossier2 ."/" .$oDossier3  ;
												//On teste si l'extension du fichier est .gz
												if (strrchr($oDossier3,".")==".gz") 
												{
													$zNewImageMiniature	= str_replace(".gz", "",$oDossier3) ;
													self::extractRar( $zImageMiniature,str_replace(".gz", "",$zImageMiniature) ) ;
													$zImageMiniatureDestination	=  $_zPathDossierMiniature . "/"   . "mini_" . $zFileName . "_"  . $zNewImageMiniature ;
													//On copie les fichiers dans le dossier miniature
													copy ($zImageMiniature , $zImageMiniatureDestination ) ;
													self::ajouterPhoto( "mini_".$zFileName . "_"  . $zNewImageMiniature , $_oParamsConnections ) ;
													self::ajouterCorrespondancePhotoAnnonce( "mini_".$zFileName . "_"  . $zNewImageMiniature , $iAnnonceId ,$_oParamsConnections ) ;
													//unlink($zImageMiniature) ;
												}
												else
												{
													$zImageMiniatureDestination	=  $_zPathDossierMiniature . "/"   . "mini_" . $zFileName . "_"  . $oDossier3 ;
													//On copie les fichiers dans le dossier miniature
													copy ($zImageMiniature , $zImageMiniatureDestination ) ;
													self::ajouterPhoto( "mini_".$zFileName . "_"  . $oDossier3 , $_oParamsConnections ) ;
													self::ajouterCorrespondancePhotoAnnonce( "mini_".$zFileName . "_"  . $oDossier3 , $iAnnonceId ,$_oParamsConnections ) ;
												}
												
												
											}
											
										}
									}
								}
								//on teste si la deuxieme generation est un fichier
								if( is_file( $_zPathDossierImage . "/" .$oDossier1. "/" . $oDossier2 ) )
								{
									$zImageAnnonce				= $_zPathDossierImage   . "/" . $oDossier1 . "/" . $oDossier2 ;
									//On teste si l'extension du fichier est .gz
									if (strrchr($oDossier2,".")==".gz") 
									{
										$zNewImageAnnonce		= str_replace(".gz", "",$oDossier2) ;
										$zExtensionAnnonce		= strrchr($zNewImageAnnonce,".") ;

										$zPathNewImageAnnone	= $_zPathDossierImage   . "/" . $oDossier1 . "/" . $zNewImageAnnonce.$zExtensionAnnonce ;
										self::extractRar( $zImageAnnonce,$zPathNewImageAnnone ) ;

										$zImageAnnonceDestination	= $_zPathDossierAnnonce . "/" . $zFileName ."_" . $zNewImageAnnonce.$zExtensionAnnonce ;
										//On copie les fichiers dans le dossier annonce
										copy ($zImageAnnonce , $zImageAnnonceDestination ) ;
										//on ajoute les fichiers dans la base dans la table ao_photo
										self::ajouterPhoto( $zFileName ."_" . $zNewImageAnnonce.$zExtensionAnnonce , $_oParamsConnections ) ;
										self::ajouterCorrespondancePhotoAnnonce( $zFileName ."_" . $zNewImageAnnonce.$zExtensionAnnonce , $iAnnonceId ,$_oParamsConnections ) ;
										//unlink($zImageAnnonce) ;
									}
									else
									{
										$zImageAnnonceDestination	= $_zPathDossierAnnonce . "/" . $zFileName ."_" . $oDossier2 ;
										//On copie les fichiers dans le dossier annonce
										copy ($zImageAnnonce , $zImageAnnonceDestination ) ;
										//on ajoute les fichiers dans la base dans la table ao_photo
										self::ajouterPhoto( $zFileName ."_" . $oDossier2 , $_oParamsConnections ) ;
										self::ajouterCorrespondancePhotoAnnonce( $zFileName ."_" . $oDossier2 , $iAnnonceId ,$_oParamsConnections ) ;
									}
									
								} 
							}
					}
				
				}
				
			} 
			
		
		}

		/*
		*Fonction permettant de recuperer la marque /modele/version d'une annonce
		*@param integer $_iAnnonceId
		*@param string  $zMarqueModeleVersion
		*/

		public static function getMarqueModeleVersionByAnnonceId ($_iAnnonceId , $_oParamsConnections) 
		{
			
			if ($_iAnnonceId)
			{
					$zReturn			= $_iAnnonceId ."_" ;
					$zQuery = "
									SELECT 
										Occas_Version ,
										marque_libelle ,
										modele_libelle
									FROM 
										ao_voiture_occasion
									LEFT JOIN 
										ao_marque
										ON(ao_voiture_occasion.Occas_Marque = ao_marque.marque_id) 
									LEFT JOIN
										ao_modele
										ON(ao_voiture_occasion.Occas_Modele = ao_modele.modele_id)
									WHERE IdOccasion = $_iAnnonceId
								" ;
					$oConnect			= mysql_connect($_oParamsConnections->zHost, $_oParamsConnections->zUser,$_oParamsConnections->zPass);
					mysql_select_db($_oParamsConnections->newDb, $oConnect);
					$oRes				= mysql_query($zQuery, $oConnect) ;
					$oRow				= mysql_fetch_object($oRes) ;
					
					if ( is_object($oRow) ) 
					{
						$zReturn.= utf8_encode ( strtolower ( str_replace(" " , "_" , $oRow->marque_libelle .'_'.$oRow->modele_libelle .'_'.$oRow->Occas_Version) ) ) ;
					}
					
					return $zReturn ;
			}else{
			
					return $_iAnnonceId ."_" ;
			}
			
		
		}
		/*
		*Fonction permettant d'ajouter dans la base le nom du fichier photo
		*@param string $_zPhotoName
		*@return boolean $bSuccess
		*/
		public static function ajouterPhoto ( $_zPhotoName , $_oParamsConnections )
		{
			$bSuccess			= false ;
			$zQuery				= " INSERT INTO ao_photo(photo_name)VALUES('".$_zPhotoName."') " ;
			$oConnect			= mysql_connect($_oParamsConnections->zHost, $_oParamsConnections->zUser,$_oParamsConnections->zPass);
			if ( mysql_query($zQuery, $oConnect) ) {
			
				$bSuccess		= true ;
			}
			return $bSuccess ;
		}
		/*
		*Fonction permettant d'ajouter dans la base le nom du fichier photo
		*@param string $_zPhotoName
		*@return boolean $bSuccess
		*/
		public static function ajouterCorrespondancePhotoAnnonce ( $_zPhotoName ,$_iAnnonceId , $_oParamsConnections )
		{
			$bSuccess			= false ;
			//On recupere l'id du photo
			$zQuery				= " SELECT photo_id FROM  ao_photo WHERE photo_name = '".$_zPhotoName."' " ;
			$oConnect			= mysql_connect($_oParamsConnections->zHost, $_oParamsConnections->zUser,$_oParamsConnections->zPass);
			$oRes				= mysql_query($zQuery, $oConnect) ;
			$oRow				= mysql_fetch_object($oRes) ;
			$iPhotoId			= $oRow->photo_id ;
			
			//On insere la correspondance photo annonce dans la base
			$zQueryInsert		= "INSERT INTO ao_photo_annonce (annonce_id ,photo_id) VALUES ($_iAnnonceId , $iPhotoId ) " ;
			if ( mysql_query($zQueryInsert, $oConnect) ) {
			
				$bSuccess		= true ;
			}
			return $bSuccess ;
		}
		/*
		*Fonction permettant d'extraire un fichier rar
		*@param string $_zFileName
		*@return boolean $bSuccess
		*/
		public static function extractRar ($zSrcName, $zDstName) {
			
				//On ouvre le fichier compressé
				$oFluxSource			= gzopen($zSrcName, 'r') ;
				//On initialise la variable contenant les données
				$zData					= "" ;
				//On boucle sur le flux 
				while (!gzeof($oFluxSource)) {
					$zData.= gzgetc($oFluxSource) ;
				}
				//On ouvre le fichier à decompresse
				$oFluxDestination		= fopen($zDstName, 'w');
				//On ecrit ladedans
				fwrite($oFluxDestination, $zData, strlen($zData));
				gzclose($oFluxDestination);
		}
		/*
		*Fonction permettant creer un fichier rar
		*@param string $_zFileName
		*@return boolean $bSuccess
		*/
		public static function createRar ($zSrcName, $zDstName) {
			
				$oFluxSource		= fopen($zSrcName, "r") ;
				$zData				= fread ($oFluxSource, filesize($zSrcName)) ;
				fclose($oFluxSource) ;

				$oFluxDestination	= gzopen($zDstName, "w9");
				gzwrite($oFluxDestination, $zData);
				gzclose($oFluxDestination);
		}

	}
	//nom du dossier que l'on va mettre les images de l'annonce
	$zPathDossierAnnonce		= "C:/Projets/auto2/back_up_annonce" ;
	//nom du dossier que l'on va mettre les images de la miniature
	$zPathDossierMiniature		= "C:/Projets/auto2/back_up_miniature" ;
	//nom du dossier de l'images original
	$zPathDossierImage			= "C:/Projets/auto2/btest_de_compression" ;
	$oCopieImage				= new CopieImage() ;
	$oParamsConnections			= new stdClass() ;
	$oParamsConnections->zHost	= $host ;
	$oParamsConnections->zUser	= $user ;
	$oParamsConnections->zPass	= $pass ;
	$oParamsConnections->newDb	= $newDb ;
	$oCopieImage->ouvrirDossierZip($zPathDossierImage,$zPathDossierAnnonce,$zPathDossierMiniature ,$oParamsConnections) ;
	//$oCopieImage::extractRar("C:/Projets/auto2/0.jpg.gz","C:/Projets/auto2/1.jpg") ;
?>